package br.com.esporte.facade;

import java.util.List;

import br.com.esporte.business.impl.util.DataGeneric;
import br.com.esporte.model.Advertencia;
import br.com.esporte.model.DiaPraticadoGrupo;
import br.com.esporte.model.Grupo;
import br.com.esporte.model.GrupoParticipante;
import br.com.esporte.model.Jogador;
import br.com.esporte.model.Movimentacao;
import br.com.esporte.model.Partida;
import br.com.esporte.model.PresencaDiaPraticado;
import br.com.esporte.model.Regra;
import br.com.esporte.model.Time;
import br.com.esporte.model.TipoAdvertenciaEnum;
import br.com.esporte.model.TipoEsporteEnum;
import br.com.esporte.model.TipoVotacaoEnum;
import br.com.esporte.model.Usuario;
import br.com.esporte.model.Votacao;
import br.com.esporte.model.atualizacao.Atualizacao;
import br.com.esporte.persistence.filter.FiltroAdvertencia;
import br.com.esporte.persistence.filter.FiltroAtualizacao;
import br.com.esporte.persistence.filter.FiltroDiaPraticadoGrupo;
import br.com.esporte.persistence.filter.FiltroGrupo;
import br.com.esporte.persistence.filter.FiltroGrupoParticipante;
import br.com.esporte.persistence.filter.FiltroJogador;
import br.com.esporte.persistence.filter.FiltroMovimentacao;
import br.com.esporte.persistence.filter.FiltroPartida;
import br.com.esporte.persistence.filter.FiltroPresencaDiaPraticado;
import br.com.esporte.persistence.filter.FiltroRegra;
import br.com.esporte.persistence.filter.FiltroTime;
import br.com.esporte.persistence.filter.FiltroUsuario;
import br.com.esporte.persistence.filter.FiltroVotacao;

/**
 * @author Milton Domingues
 */
public interface Fachada {

	public void alterar(Atualizacao atualizacao, Usuario usuario);

	public void alterar(DiaPraticadoGrupo dia, Usuario usuario);

	public void alterar(Grupo grupo, Usuario usuario);

	public void alterar(GrupoParticipante dia, Usuario usuario);

	public void alterar(Movimentacao movimentacao, Usuario usuario);

	public void alterar(Partida partida, Usuario usuario);

	public void alterar(PresencaDiaPraticado presenca, Usuario usuario);

	public void alterar(Regra regra, Usuario usuario);

	public void alterar(Votacao votacao, Usuario usuario);

	public Atualizacao buscarAtualizacao(Long id);

	public DiaPraticadoGrupo buscarDiaPraticadoGrupo(Long id);

	public GrupoParticipante buscarGrupoParticipanteGrupo(Long id);

	public Movimentacao buscarMovimentacao(Long id);

	public Partida buscarPartida(Long id);

	public PresencaDiaPraticado buscarPresencaDiaPraticado(Long id);

	public Usuario buscarUsuario(Long id);

	public Votacao buscarVotacao(Long id);

	public List<Advertencia> consultar(FiltroAdvertencia filtro);

	public List<Atualizacao> consultar(FiltroAtualizacao filtro);

	public List<DiaPraticadoGrupo> consultar(FiltroDiaPraticadoGrupo filtro);

	public List<Grupo> consultar(FiltroGrupo filtro);

	public List<GrupoParticipante> consultar(FiltroGrupoParticipante filtro);

	public List<Jogador> consultar(FiltroJogador filtro);

	public List<Movimentacao> consultar(FiltroMovimentacao filtro);

	public List<Partida> consultar(FiltroPartida filtro);

	public List<PresencaDiaPraticado> consultar(FiltroPresencaDiaPraticado filtro);

	public List<Regra> consultar(FiltroRegra filtroRegra);

	public List<Time> consultar(FiltroTime filtro);

	public List<Usuario> consultar(FiltroUsuario filtroUsuario);

	public List<Votacao> consultar(FiltroVotacao filtro);

	public List<Usuario> consultar(Grupo grupo);

	public List<Atualizacao> consultarAtualizacaoGruposUsuario(Usuario usuario, TipoEsporteEnum tipo, int qtd, int offset);

	public List<DiaPraticadoGrupo> consultarDiaPraticadoGrupo(Grupo grupo);

	public List<GrupoParticipante> consultarGruposTipoEsporteParticipaUsuario(Usuario usuario, TipoEsporteEnum tipo);

	public Usuario consultarMaiorPontuador(DiaPraticadoGrupo dia);

	public List<DataGeneric<Usuario, DataGeneric<Integer, Boolean>>> consultarMaiorVotadoQtdVotos(DiaPraticadoGrupo dia, TipoVotacaoEnum tipo);

	public DataGeneric<Usuario, Integer> consultarMaiorVotadoTipoDiaPraticado(DiaPraticadoGrupo dia, TipoVotacaoEnum tipo);

	public List<Usuario> consultarModeradores(Grupo grupo);

	public DiaPraticadoGrupo consultarProximaDiaPraticadoGrupo(Grupo grupo);

	public Integer consultarQtdAdvertencias(DiaPraticadoGrupo dia, TipoAdvertenciaEnum tipo);

	public Integer consultarQtdPartidas(DiaPraticadoGrupo dia);

	public Integer consultarQtdPontos(DiaPraticadoGrupo dia);

	public List<Usuario> consultarUsuariosParticipaGrupo(Grupo grupo);

	public void enviarEmail(String texto, Usuario usuario);

	public void excluir(GrupoParticipante grupoParticipante);

	public void excluir(Usuario usuario);

	public void inserir(Atualizacao atualizacao, Usuario usuario);

	public void inserir(DiaPraticadoGrupo diaPraticado, Usuario usuario);

	public void inserir(Grupo grupo, Usuario usuario);

	public void inserir(Movimentacao movimentacao, Usuario usuario);

	public void inserir(Partida partida, Usuario usuario);

	public void inserir(PresencaDiaPraticado presenca, Usuario usuario);

	public void inserir(Regra regra, Usuario usuario);

	public void inserir(Usuario usuario);

	public void inserir(Votacao votacao, Usuario usuario);

	public void solicitarIngressoGrupo(Grupo grupo, Usuario usuario);

	public void validarLogin(Usuario usuario);

}
